/*===============================================
*   文件名称：cjosn_demo.c
*   创 建 者：宁志鹏     
*   创建日期：2025年01月09
*   描    述：cjson库中API解析
================================================*/
#include <stdio.h>
#include <cjson/cjson.h>

/*
CJSON_PUBLIC(const char*) cJSON_Version(void);
打印当前cJSON的版本

demo:
   printf("Version: %s\n", cJSON_Version());
*/
CJSON_PUBLIC(const char*) cJSON_Version(void);

/*
CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks);
初始化hooks, 不同系统内存分配函数稍有差别，通过cJSON_InitHooks实现兼容。

demo:
    cJSON_Hooks* hooks=NULL;
    cJSON_InitHooks(hooks);
*/
CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks);

/*
CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);  
列化json字符串

demo:
    char * string = "{\"name\":\"xxx\", \"name2\":\"xxx2\"}";
    cJSON * root = cJSON_Parse(string);
*/
CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value); 

/*
CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value, size_t buffer_length);  
和 cJSON_Parse没有太大区别，其内部也要计算json字符串的长度

demo:
    char * string = "{\"name\":\"xxx\", \"name2\":\"xxx2\"}";
    cJSON * root = cJSON_ParseWithLength(string, strlen(string)+sizeof(""));//考虑到字符串末尾的长度
*/
CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value, size_t buffer_length);

/*
CJSON_PUBLIC(cJSON*) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated);
也是格式化json字符串return_parse_end， require_null_terminated默认传0

demo:
    char * string = "{\"name\":\"xxx\",\"name2\":\"xxx2\"\"}";
    cJSON * root = cJSON_ParseWithOpts(string, 0, 0);
    if(root==NULL){
	   printf("Error_content : %s\n", cJSON_GetErrorPtr());
    }else printf("%s\n", cJSON_Print(root));
*/
CJSON_PUBLIC(cJSON*) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated);

/*
CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_t buffer_length, const char **return_parse_end, cJSON_bool require_null_terminated);
参数要求同cJSON_ParseWithOpts一致

demo:
    char * string = "{\"name\":\"xxx\",\"name2\":\"xxx2\"}";
    cJSON * root = cJSON_ParseWithLengthOpts(string, strlen(string)+sizeof(""), 0, 0);
    if(root==NULL){
        printf("Error_content : %s\n", cJSON_GetErrorPtr());
    }else printf("%s\n", cJSON_Print(root));
*/
CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_t buffer_length, const char **return_parse_end, cJSON_bool require_null_terminated);

/*
CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
格式化打印json对象

demo:
    同cJSON_ParseWithLengthOpts函数用法一致
*/
CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);

